
/**
 * Provides the FirstLight InventoryState.
 *
 * @file States/InventoryState.hpp
 * @author Jacob Dix
 */

#ifndef   INVETORY_STATE_HPP_INCLUDED
#define   INVETORY_STATE_HPP_INCLUDED

#include <GQE/Core.hpp>
#include <GQE/Entities.hpp>
#include "JDD/classes/Console.hpp"
#include "Game_types.hpp"
class InventoryState : public GQE::IState
{
public:
    /**
     * InventoryState constructor
     * @param[in] theApp is a pointer to the App class.
     */
    InventoryState(GQE::App* theApp);

    /**
     * InventoryState deconstructor
     */
    virtual ~InventoryState(void);

    /**
     * DoInit is responsible for initializing this State
     */
    virtual void DoInit(void);

    /**
     * ReInit is responsible for Reseting this state when the
     * StateManager::ResetActiveState() method is called.  This way a Game
     * State can be restarted without unloading and reloading the game assets
     */
    virtual void ReInit(void);

    /**
     * HandleEvents is responsible for handling input events for this
     * State when it is the active State.
     * @param[in] theEvent to process from the App class Loop method
     */
    virtual void HandleEvents(sf::Event theEvent);

    /**
     * UpdateFixed is responsible for handling all State fixed update needs for
     * this State when it is the active State.
     */
    virtual void UpdateFixed(void);

    /**
     * UpdateVariable is responsible for handling all State variable update
     * needs for this State when it is the active State.
     * @param[in] theElapsedTime since the last Draw was called
     */
    virtual void UpdateVariable(float theElapsedTime);

    /**
     * Draw is responsible for handling all Drawing needs for this State
     * when it is the Active State.
     */
    virtual void Draw(void);

protected:
    /**
     * Cleanup is responsible for performing any cleanup required before
     * this State is removed.
     */
    virtual void Cleanup(void);

private:
    // Variables
    /////////////////////////////////////////////////////////////////////////
    GQE::ObjectManager mObjectManager;
    typeInventory* mInventory;
    typeItemRef* mSelection;
	// Display Variables
    /////////////////////////////////////////////////////////////////////////
    JDD::Console mConsole;
    std::vector<sf::String> mMainStrings;
}; // class LoadingState

#endif // GAME_STATE_HPP_INCLUDED
